import type { RouteRecordRaw } from 'vue-router'
// 加载本地路由
function loadLocalRoutes() {
  const localRoutes: RouteRecordRaw[] = []
  // 读取router/main的所有ts文件,eager立马加载
  const files: Record<string, any> = import.meta.glob('../router/main/**/*.ts', {
    eager: true
  })
  // 遍历files中的每个数据  将加载的所有对象放到localRoutes中
  for (const key in files) {
    const module = files[key]
    //module.default 获取所有的ts所导出的路径信息
    // console.log(module.default)
    localRoutes.push(module.default)
  }
  return localRoutes
}
// console.log(loadLocalRoutes())

export let firstMenu: any = null
// 映射路由的工具函数
export function mapMenusToRoutes(userMenus: any[]) {
  // 1.加载本地路由
  const localRoutes = loadLocalRoutes()
  // 根据菜单匹配正确的路由
  // 所有的共性是url相同
  // 先遍历一级路由
  const routes: RouteRecordRaw[] = []

  for (const menu of userMenus) {
    // 在遍历其中的children找到路径url
    for (const subMenu of menu.children) {
      const route = localRoutes.find((item) => item.path === subMenu.url)

      if (route) {
        // 如果点一级标题，自动跳转到对应导航下面的第一个路由,
        // 如果当前路径等于menu的path，说明刚才已经添加过了，就不需要再加了，如果find没找到则继续添加
        if (!routes.find((item) => item.path === menu.url)) {
          routes.push({ path: menu.url, redirect: route.path })
        }
        // 将二级菜单对应路由添加上去
        routes.push(route)
      }
      // 记录第一个被匹配到的路由    第一次没有值（为null）得时候且有路由信息，将第一个submenu赋值给firstmenu，第二次再进入firstmenu已经不为null
      // 所以不会再给firstmenu赋值了
      if (!firstMenu && route) firstMenu = subMenu
    }
  }
  return routes
}
/**
 *根据路径去匹配菜单
 * @param path 需要匹配的路径
 * @param userMenus  所有的菜单
 * @returns
 */
export function mapPathToMenu(path: string, userMenus: any[]) {
  for (const menu of userMenus) {
    for (const submenu of menu.children) {
      if (submenu.url === path) {
        return submenu
      }
    }
  }
}
interface IBreadcrumbs {
  name: string
  path: string
}
export function mapPathToBreadcrumbs(path: string, userMenus: any[]) {
  // 定义面包屑
  const breadcrumbs: IBreadcrumbs[] = []
  // 获取面包屑层级
  for (const menu of userMenus) {
    for (const submenu of menu.children) {
      if (submenu.url === path) {
        breadcrumbs.push({ name: menu.name, path: menu.url })
        breadcrumbs.push({ name: submenu.name, path: submenu.url })
      }
    }
  }
  return breadcrumbs
}
